Wang Haihua
🍈 🍉🍊 🍋 🍌
某修理店只有一个修理工, 来修理的顾客到达时间间隔服从负指数分布, 平均间隔时间 $10 \mathrm{~min}$; 对顾客的服务时间服从 $[4,15]$ (单位: min)上的均匀分布; 当到来的顾客较多时, 一部分顾客便需排队等待, 排 队按先到先服务规则, 队长无限制; 服务完的顾客便离开修理店。假定一个 工作日为 $8 \mathrm{~h}$ 。
(1) 模拟一个工作日内完成服务的个数及顾客平均等待时间。
(2) 模拟 1000 个工作日, 求出平均每日完成服务的个数及每日顾客的 平均等待时间。
记第 $k$ 位顾客的到达时间间隔 $t_{k}$, 到达时刻 $c_{k}$, 离开时刻 $g_{k}$, 等待 时间 $w_{k}$, 它们很容易根据已有的到达时间间隔 $t_{k}$ 和服务时间 $s_{k}$ 按照以下的递推关系得到 $$ c_{k}=c_{k-1}+t_{k}, g_{k}=\max \left(c_{k}, g_{k-1}\right)+s_{k}, w_{k}=\max \left(0, g_{k-1}-c_{k}\right), k=2,3, \cdots . $$
模拟一个工作日完成服务的个数及顾客平均等待时间, 运行结果特别不稳定。模拟 1000 个工作日, 平均每日完成服务的个数约为 44 , 平均等待时间 在 $25.66$ 分钟左右。
代码
from numpy.random import exponential, uniform, seed
from numpy import mean, array, zeros
seed(4) #进行一致性比较,每次运行结果一样
def oneday():
W=[0] #第一个顾客的等待时间
t0=exponential(10); c0=t0
g0=c0+uniform(4,15); g=g0
while g<480:
t=exponential(10) #下一个到达时间间隔
c=c0+t #下一个到达时刻
w=max(0,g-c) #下一个等待时间
g=max(g,c)+uniform(4,15) #下一个离开时刻
c0=c #把当前到达时刻保存起来
W.append(w) #把等待时间保存到列表中
return len(W), mean(W)
W1=oneday(); print("服务人数和平均等待时间分别为:",W1)
d=1000 #模拟的天数
T=zeros(d); N=zeros(d)
for i in range(d):
N[i],T[i]=oneday()
print("平均服务人数为:",round(N.mean()))
print("平均等待时间为:",T.mean())
from numpy.random import exponential, uniform, seed
from numpy import mean, array, zeros
seed(4) #进行一致性比较,每次运行结果一样
def oneday():
W=[0] #第一个顾客的等待时间
t0=exponential(10); c0=t0
g0=c0+uniform(4,15); g=g0
while g<480:
t=exponential(10) #下一个到达时间间隔
c=c0+t #下一个到达时刻
w=max(0,g-c) #下一个等待时间
g=max(g,c)+uniform(4,15) #下一个离开时刻
c0=c #把当前到达时刻保存起来
W.append(w) #把等待时间保存到列表中
return len(W), mean(W)
W1=oneday(); print("服务人数和平均等待时间分别为:",W1)
d=1000 #模拟的天数
T=zeros(d); N=zeros(d)
for i in range(d):
N[i],T[i]=oneday()
print("平均服务人数为:",round(N.mean()))
print("平均等待时间为:",T.mean())
服务人数和平均等待时间分别为: (39, 27.715473775462396) 平均服务人数为: 44 平均等待时间为: 25.66246800140869
W=[0]
def oneday():
#第一个顾客的等待时间
t0=exponential(10); c0=t0
g0=c0+uniform(4,15); g=g0
while g<480:
t=exponential(10) #下一个到达时间间隔
c=c0+t #下一个到达时刻
w=max(0,g-c) #下一个等待时间
g=max(g,c)+uniform(4,15) #下一个离开时刻
c0=c #把当前到达时刻保存起来
W.append(w) #把等待时间保存到列表中
for i in range(d):
oneday()
import matplotlib.pyplot as plt
plt.plot(range(len(W)),W)
plt.show()